﻿using System;
using System.Collections.Generic;
using System.Configuration;
using PortalCurriculo.Domain.Interface;
using System.Linq;
using PortalCurriculo.Domain.Helpers;

namespace PortalCurriculo.Domain
{
    public partial class Email : IEmail
    {
        public void Salvar()
        {
            Ativo = true;
            DataAlteracao = DateTime.Now;
            DataInclusao = DateTime.Now;

            Save();
        }

        public void EnviarEmailEvento(Pessoa pessoa, TipoEmail.Evento evento)
        {
            Email email = ObterEmail(evento);

            if (email == null) return;

            var destinatarios = new List<Pessoa> { pessoa };

            string assunto = SubstituirVariaveis(email.Assunto, pessoa);
            string conteudo = SubstituirVariaveis(email.Conteudo, pessoa);

            MailHelper.EnviarEmail(assunto, conteudo, email, destinatarios);
        }

        public void EnviarEmailEvento(Pessoa pessoaDe, Pessoa pessoaPara, TipoEmail.Evento evento)
        {
            Email email = ObterEmail(evento);

            if (email == null) return;

            var destinatarios = new List<Pessoa> { pessoaDe };

            string assunto = SubstituirVariaveis(email.Assunto, pessoaDe, pessoaPara);
            string conteudo = SubstituirVariaveis(email.Conteudo, pessoaDe, pessoaPara);

            MailHelper.EnviarEmail(assunto, conteudo, email, destinatarios);
        }

        private Email ObterEmail(TipoEmail.Evento evento)
        {
            string tipoEvento = evento.ToString();

            return (from emailLinq in Context.Instance.Emails
                    where emailLinq.TipoEmail.Nome.Equals(tipoEvento)
                    select emailLinq).FirstOrDefault();
        }

        private static string SubstituirVariaveis(string texto, Pessoa pessoaDe, Pessoa pessoaPara)
        {
            texto = SubstituirVariaveis(texto, pessoaDe);
            texto = texto.Replace("[Company]", pessoaPara.PessoaJuridica.NomeFantasia);

            return texto;
        }

        private static string SubstituirVariaveis(string texto, Pessoa pessoa)
        {
            texto = texto.Replace("[Name]",
                                  pessoa.PessoaFisica == null
                                      ? pessoa.PessoaJuridica.NomeFantasia
                                      : pessoa.PessoaFisica.NomeCompleto);
            texto = texto.Replace("[FirstName]", pessoa.PessoaFisica == null
                                                     ? pessoa.PessoaJuridica.NomeFantasia.Split(' ')[0]
                                                     : pessoa.PessoaFisica.NomeCompleto.Split(' ')[0]);
            texto = texto.Replace("[LinkEmailConfirmation]",
                                  ConfigurationManager.AppSettings.Get("LinkConfirmacaoEmail") + Helpers.Util.Criptografar(pessoa.Email));
            texto = texto.Replace("[LinkConfirmRecruiter]",
                                  ConfigurationManager.AppSettings.Get("LinkConfirmRecruiter") + Helpers.Util.Criptografar(pessoa.Email));

            return texto;
        }
    }
}